/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2009，所有权利保留。
 * 
 * 项目名：	rumba-widget2
 * 文件名：	RFieldComposite.java
 * 模块说明：	
 * 修改历史：
 * Feb 13, 2009 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.form;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;

/**
 * 可作为表单域的Composite。
 * 
 * @author lxm
 * 
 */
public abstract class RFieldComposite extends Composite implements HasRFieldCaption, WithRequired {

  private String fieldCaption;
  private boolean enabled = true;
  private boolean required = false;
  private RFieldCaptionListener fieldCaptionListener;

  public String getFieldCaption() {
    return fieldCaption;
  }

  /**
   * 设置表单域标题。
   * 
   * @param fieldCaption
   */
  public void setFieldCaption(String fieldCaption) {
    this.fieldCaption = fieldCaption;
    fireFieldCaptionChange();
  }

  public boolean isEnabled() {
    return enabled;
  }

  /**
   * 设置是否可用。
   * 
   * @param enabled
   */
  public void setEnabled(boolean enabled) {
    this.enabled = enabled;
    fireFieldCaptionChange();
  }

  public boolean isRequired() {
    return required;
  }

  /**
   * 设置是否必填。
   * 
   * @param required
   */
  public void setRequired(boolean required) {
    this.required = required;
    fireFieldCaptionChange();
  }

  public Widget asWidget() {
    return this;
  }

  public void setFieldCaptionListener(RFieldCaptionListener listener) {
    fieldCaptionListener = listener;
  }

  public void removeFieldCaptionListener() {
    fieldCaptionListener = null;
  }

  /**
   * 触发RFieldCaptionListener.onChange事件。
   */
  protected void fireFieldCaptionChange() {
    if (fieldCaptionListener != null)
      fieldCaptionListener.onChange(this);
  }

  /**
   * 判断当前控件是否被加入到标签容器中。
   * 
   * @return
   */
  protected boolean includedByLabeledBox() {
    return fieldCaptionListener != null;
  }

}
